#include "recform.h"
#include "ui_recform.h"
#include <recformitem.h>
#include <QJsonObject>
#include <QList>

RecForm::RecForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RecForm),
    // 设置行列的默认值为 1，4
    row(1),
    col(4)
{
    ui->setupUi(this);
}

RecForm::~RecForm()
{
    delete ui;
}

void RecForm::initRecFormUi(QJsonArray data, int row)
{
    // 两行：属于 "你的音乐补给"
    if(row == 2)
    {
        this->row = row;
        this->col = 8;  // 总共要添加 8 个图片
    }
    // 一行：属于 "今日推荐"
    else
    {
        ui->musicDown->hide();
    }
    imageList = data;
    currentIndex = 0;
    count = imageList.size() / col;  // 如果是 "今日推荐"，那么就是有 图片个数/4 组，如果是 "音乐补给站"，那么就是有 图片个数/8 组
    // 在 RecForm 中添加 RecFormItem
    createRecFormItem();
}

void RecForm::createRecFormItem()
{
    // 在换组图片之前，需要将当前的所有图片都清空，使用 findChildren 来获取当前的所有子元素
    QList<RecFormItem*> listUp = ui->musicUp->findChildren<RecFormItem*>();
    for(auto e : listUp)
    {
        ui->musicUpHorizontalLayout->removeWidget(e);
        delete e;  // 因为是 new 出来的，所有要手动释放
    }
    QList<RecFormItem*> listDown = ui->musicDown->findChildren<RecFormItem*>();
    for(auto e : listDown)
    {
        ui->musicDownHorizontalLayout->removeWidget(e);
        delete e;  // 因为是 new 出来的，所有要手动释放
    }
    // 注意要跟当前的组下标进行对应图片
    for(int i = currentIndex * col, index = 0;i < col + currentIndex * col;i++, index++)
    {
        // 获取一个要插入的 item 的信息
        QJsonObject data = imageList[i].toObject();
        // 创建一个 item，将信息添加到 item 中
        RecFormItem* item = new RecFormItem();
        item->setTextAndImage(data["image"].toString(), data["text"].toString());
        // 添加到 Form 中
        // 此时添加的 item 超过了4个，且是 "你的音乐补给站" 的 form，那么就需要添加到 downLayout 中
        // 这里可以使用 index 进行对照，因为 i 变成了需要填的组数对应的图片，index继续填充添加到 Up 还是到 Down
        if(index >= col/2 && row == 2) ui->musicDownHorizontalLayout->addWidget(item);
        // 其他的都添加到 up 中
        else ui->musicUpHorizontalLayout->addWidget(item);
    }
}

void RecForm::on_nextPage_clicked()
{
    // 翻到下一页，换一组推荐，如果到了最后一组，那么变成第 0 组
    // 更新当前的组数
    currentIndex = (currentIndex + 1) % count;
    // 换到下一组
    createRecFormItem();
}

void RecForm::on_prePage_clicked()
{
    // 翻到上一组，换一组推荐，如果到了第 0 组，那么变成最后一组
    currentIndex = currentIndex - 1 < 0 ? count-1 : currentIndex - 1;
    // 换到下一组
    createRecFormItem();
}
